"use strict";
/**
 * 抽象类
 * 定义一个规范
 * 提供一些写完的方法
 */
class Package {
    // 构造方法
    constructor(weight) {
        this.weight = weight;
    }
    // 具体方法
    printPackage() {
        console.log(`包裹重量为：${this.weight}kg，运费为：${this.calculate()}元`);
    }
}
// 派生类
class StandardPackage extends Package {
    constructor(weight, // 继承 weight，不需要public
    unitPrice // 自己定义的，需要 public (用于简写)
    ) {
        super(weight);
        this.unitPrice = unitPrice;
    }
    // 必须写calculate抽象方法的具体方法
    calculate() {
        return this.weight * this.unitPrice;
    }
}
// 派生类
class ExpressPackage extends Package {
    constructor(weight, // 继承 weight，不需要public
    unitPrice, // 自己定义的，需要 public (用于简写)
    addtionPrice // 自己定义的，需要 public (用于简写)
    ) {
        super(weight);
        this.unitPrice = unitPrice;
        this.addtionPrice = addtionPrice;
    }
    // 必须写calculate抽象方法的具体方法
    calculate() {
        if (this.weight > 10) {
            return 10 * this.unitPrice + (this.weight - 10) * this.addtionPrice;
        }
        else {
            return this.weight * this.unitPrice;
        }
    }
}
const p1 = new StandardPackage(20, 12);
p1.printPackage();
